iT邦幫忙

2023 iThome 鐵人賽

DAY 16
0

Day14有提到說Google Calendar API主要有五個常用的項目清單,前面幾天介紹了3個,這邊先把後面兩個講完,再開始講Code相關的內容:

Setting

setting的部分顧名思義就是Google Calendar相關的設定,但這邊只能show出來在UI介面更改的設定,沒辦法使用這支API來取得設定。

可以用List或Get的方式取得Google Calendar的設定,這邊是官方列出來支援設定的清單。

設定 ID 說明 接受的值 預設值
自動新增 Hangouts 是否自動將 Hangouts 新增到所有活動。請注意,如果 conferenceDataVersion 大於 0,則伺服器會忽略這項設定,因為用戶端必須根據這項設定處理邏輯。(唯讀)。 「true」、「false」 「false」
日期欄位順序 顯示日期時,日期 (D)、月 (M) 和年份 (Y) 的順序應該一致。 「MDY」、「DMY」、「YMD」 「MDY」
預設事件長度 建立時沒有明確時間長度的預設事件時間長度 (以分鐘為單位)。 正數 「60」
格式 24 小時 是否以 24 小時格式顯示時間。 「true」、「false」 「false」
隱藏邀請 是否隱藏使用者受邀但未採取行動 (例如回覆) 的活動。 「true」、「false」 「false」
隱藏週末 是否顯示週末時應隱藏週末。 「true」、「false」 「false」
語言代碼 使用者所在地區。 「{0/}」代表 「en」
僅限提醒開啟回應事件 是否只應回覆使用者的回覆狀態為「是」和「不確定」的活動。 「true」、「false」 「false」
顯示拒絕活動 是否要在使用者的日曆中顯示 [回覆] 回覆使用者的活動。 「true」、「false」 「true」
時區 使用者時區的 ID。 請參閱 http://www.iana.org/time-zones 「Etc/GMT」
使用鍵盤快速鍵 是否要啟用鍵盤快速鍵。 「true」、「false」 「true」
weekStart 一週是否為星期日 (0)、星期一 (1) 或星期六 (6)。 「0」、「1」、「6」 「0」

Get

GET https://www.googleapis.com/calendar/v3/users/me/settings/**setting**

這是Setting:get,只要打上settingId就可以查詢該setting的內容,如果不知道settingId的話,可以用List來查詢

List

GET https://www.googleapis.com/calendar/v3/users/me/settings

這邊是Setting:list,有三個選用的參數可以下,這邊最主要會用到的就是maxResults,也就是response回傳的最大上限,預設為100,若有需要更改的話可以在body中帶上,這邊show一下setting:list出來的結果。

{
 "kind": "calendar#settings",
 "etag": "\"p32kelh6kgvao20o\"",
 "nextSyncToken": "00001696170540873000",
 "items": [
  {
   "kind": "calendar#setting",
   "etag": "\"\"",
   "id": "autoAddHangouts",
   "value": "true"
  },
  {
   "kind": "calendar#setting",
   "etag": "\"\"",
   "id": "defaultEventLength",
   "value": "60"
  },
  {
   "kind": "calendar#setting",
   "etag": "\"\"",
   "id": "dateFieldOrder",
   "value": "MDY"
  },
  {
   "kind": "calendar#setting",
   "etag": "\"\"",
   "id": "weekStart",
   "value": "1"
  },
  {
   "kind": "calendar#setting",
   "etag": "\"\"",
   "id": "format24HourTime",
   "value": "false"
  },
  {
   "kind": "calendar#setting",
   "etag": "\"\"",
   "id": "hideInvitations",
   "value": "false"
  },
  {
   "kind": "calendar#setting",
   "etag": "\"\"",
   "id": "locale",
   "value": "en"
  },
  {
   "kind": "calendar#setting",
   "etag": "\"\"",
   "id": "remindOnRespondedEventsOnly",
   "value": "false"
  },
  {
   "kind": "calendar#setting",
   "etag": "\"\"",
   "id": "showDeclinedEvents",
   "value": "true"
  },
  {
   "kind": "calendar#setting",
   "etag": "\"\"",
   "id": "timezone",
   "value": "Asia/Taipei"
  },
  {
   "kind": "calendar#setting",
   "etag": "\"\"",
   "id": "useKeyboardShortcuts",
   "value": "true"
  },
  {
   "kind": "calendar#setting",
   "etag": "\"\"",
   "id": "hideWeekends",
   "value": "false"
  }
 ]
}

這邊List出來的內容剛好可以對應到上面的表格,用對照的方式就會知道每一個內容的設定長什麼樣子了。

ACL

ACL(Access Control List),這個List主要是用來管控權限的,這邊主要也透過List來看一下可以管控的內容。

{
  "kind": "calendar#aclRule",
  "etag": etag,
  "id": string,
  "scope": {
    "type": string,
    "value": string
  },
  "role": string
}

上方為回傳json的內容,用官方文件看一下每一個key代表的意思

資源名稱 說明 Notes
etag etag 資源的 ETag。
id string 存取控制清單 (ACL) 規則的 ID。詳情請參閱https://developers.google.com/calendar/concepts/sharing?hl=zh-tw#sharing_calendars。
kind string 資源類型 (「calendar#aclRule」)。
role string 指派給範圍的角色。可能的值包括:
• 「none」:不提供存取權。
• 「freeBusyReader」:提供有空/忙碌資訊的讀取權限。
• 「reader」:提供日曆的讀取權限。具備讀取權限的使用者會看到私人活動,但系統會隱藏活動詳細資訊。
• 「writer」:提供日曆的讀寫權限。具有寫入者存取權的使用者可以看到私人活動,而使用者也能看到活動詳細資訊。
• 「owner」:提供日曆擁有權。這個角色具備寫入者角色的所有權限,並且具備查看和操控 ACL 的權限。 可寫入
scope object 這項 ACL 規則授予的https://developers.google.com/calendar/concepts/sharing?hl=zh-tw#sharing_calendars範圍。
scope.type string 範圍類型。可能的值包括:
• 「default」:公開範圍。這是預設值。
• 「user」:將範圍限制為單一使用者。
• 「group」:將範圍限制在某個群組。
• 「domain」:將範圍限定在某個網域。注意:「default」或公開範圍的權限授予任何使用者 (無論是否經過驗證)。
scope.value string 使用者或群組的電子郵件地址 (或範圍名稱),視範圍類型而定。「default」類型時省略。 可寫入

從表格中可以知道是可以用API來更改權限的,因為role的部分是可以寫入的

List

GET https://www.googleapis.com/calendar/v3/calendars/**calendarId**/acl

要取得ACL:list,要先取得昨天講到的calendarId,這邊則會回傳所有有權限的userId

{
 "kind": "calendar#acl",
 "etag": "\"\"",
 "nextSyncToken": "00001694952290249000",
 "items": [
  {
   "kind": "calendar#aclRule",
   "etag": "\"00000000000000000000\"",
   "id": "user:@group.calendar.google.com",
   "scope": {
    "type": "user",
    "value": "@group.calendar.google.com"
   },
   "role": "owner"
  },
  {
   "kind": "calendar#aclRule",
   "etag": "\"\"",
   "id": "user:@gmail.com",
   "scope": {
    "type": "user",
    "value": "@gmail.com"
   },
   "role": "owner"
  }
 ]
}

由於一個是被創建出來的calendar,一個是原本使用的calendar,因此兩個都是owner

如果需要更改role的話,可以利用其他api來更改。

在正式進入code之前,由於google calendar API在使用的時候會需要Google OAuth 2.0的驗證,在Google Workspace上面測試會自動開啟google的認證頁面,但是在golang中要怎麼驗證呢?看起來明天要開始Survey這段了。


上一篇
Day 15 初探 Google Calendar API vol.2
下一篇
Day 17 Google Calendar API認證
系列文
行事曆不再NG:Notion API&Google Calendar跨平台整合發想30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言